home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / applet / AppletZipClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  3.7 KB  |  126 lines

  1. package sun.applet;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.URL;
  6. import java.net.URLConnection;
  7. import java.util.Hashtable;
  8. import sun.tools.zip.ZipEntry;
  9. import sun.tools.zip.ZipFormatException;
  10. import sun.tools.zip.ZipReader;
  11.  
  12. class AppletZipClassLoader extends AppletClassLoader {
  13.    Hashtable classBytes = new Hashtable();
  14.  
  15.    AppletZipClassLoader(URL var1) throws IOException {
  16.       super(var1);
  17.       System.out.println("loading zip file from " + var1);
  18.       Thread var2 = Thread.currentThread();
  19.  
  20.       try {
  21.          URLConnection var3 = var1.openConnection();
  22.          var3.setAllowUserInteraction(false);
  23.          ZipReader var4 = new ZipReader(var3.getInputStream());
  24.  
  25.          while(var4.nextEntry() && !var2.isInterrupted()) {
  26.             ZipEntry var5 = var4.getEntry();
  27.             String var6 = var5.getPath();
  28.             if (var6.endsWith(".class")) {
  29.                InputStream var7 = var4.getInputStream();
  30.                int var8 = (int)var5.length();
  31.                byte[] var9 = new byte[var8];
  32.                System.out.println("    " + var6 + " (" + var8 + " bytes)");
  33.  
  34.                int var11;
  35.                for(int var10 = 0; var10 < var8 && !var2.isInterrupted(); var10 += var11) {
  36.                   var11 = var7.read(var9, var10, var8 - var10);
  37.                   if (var11 == -1) {
  38.                      throw new ZipFormatException("bad entry: " + var6);
  39.                   }
  40.                }
  41.  
  42.                if (var2.isInterrupted()) {
  43.                   break;
  44.                }
  45.  
  46.                String var13 = var6.substring(0, var6.length() - 6).replace('/', '.');
  47.                this.classBytes.put(var13, var9);
  48.             }
  49.          }
  50.       } catch (Throwable var12) {
  51.          var12.printStackTrace();
  52.          throw new IOException("could not load zip file: " + var1);
  53.       }
  54.  
  55.       if (var2.isInterrupted()) {
  56.          this.classBytes = new Hashtable();
  57.          throw new IOException("zip loading interrupted: " + var1);
  58.       }
  59.    }
  60.  
  61.    public Class loadClass(String var1) throws ClassNotFoundException {
  62.       return this.loadClass(var1, true);
  63.    }
  64.  
  65.    protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  66.       Class var3 = (Class)super.classes.get(var1);
  67.       if (var3 == null) {
  68.          SecurityManager var4 = System.getSecurityManager();
  69.          if (var4 != null) {
  70.             int var5 = var1.lastIndexOf(46);
  71.             if (var5 >= 0) {
  72.                var4.checkPackageAccess(var1.substring(0, var5));
  73.             }
  74.          }
  75.  
  76.          try {
  77.             return ((ClassLoader)this).findSystemClass(var1);
  78.          } catch (Throwable var6) {
  79.             var3 = this.findClass(var1);
  80.          }
  81.       }
  82.  
  83.       if (var3 == null) {
  84.          throw new ClassNotFoundException(var1);
  85.       } else {
  86.          if (var2) {
  87.             ((ClassLoader)this).resolveClass(var3);
  88.          }
  89.  
  90.          return var3;
  91.       }
  92.    }
  93.  
  94.    private synchronized Class findClass(String var1) {
  95.       Class var2 = (Class)super.classes.get(var1);
  96.       if (var2 == null) {
  97.          SecurityManager var3 = System.getSecurityManager();
  98.          System.out.println(Thread.currentThread().getName() + " find class " + var1);
  99.          if (var3 != null) {
  100.             int var4 = var1.lastIndexOf(46);
  101.             if (var4 >= 0) {
  102.                var3.checkPackageDefinition(var1.substring(0, var4));
  103.             }
  104.          }
  105.  
  106.          byte[] var6 = (byte[])this.classBytes.get(var1);
  107.          if (var6 != null) {
  108.             try {
  109.                var2 = ((ClassLoader)this).defineClass(var6, 0, var6.length);
  110.                if (!var1.equals(var2.getName())) {
  111.                   throw new ClassFormatError();
  112.                }
  113.             } catch (ClassFormatError var5) {
  114.                System.err.println("Class format error: " + var1);
  115.                return null;
  116.             }
  117.  
  118.             super.classes.put(var1, var2);
  119.             this.classBytes.remove(var1);
  120.          }
  121.       }
  122.  
  123.       return var2;
  124.    }
  125. }
  126.